package com.demo.java.OD301_350.OD339;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【解密犯罪时间(B卷)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146156159
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 读取输入的时间字符串
        String t = scanner.nextLine();
        // 调用求解方法，获取下一个有效时间
        String ret = solveMethod(t);
        // 输出结果
        System.out.println(ret);
    }

    /**
     * 求解下一个有效时间
     *
     * @param time 输入的时间字符串
     * @return 返回下一个有效时间
     */
    public static String solveMethod(String time) {
        // 收集时间字符串中的数字字符
        List<Integer> nums = new ArrayList<>();
        for (char c : time.toCharArray()) {
            if (c != ':') {
                nums.add(Character.getNumericValue(c));  // 将字符转化为数字并加入列表
            }
        }

        // 分离出小时和分钟部分
        String[] timeParts = time.split(":");
        int h = Integer.parseInt(timeParts[0]);  // 小时
        int m = Integer.parseInt(timeParts[1]);  // 分钟

        // 生成所有可能的有效时间组合
        List<Integer> lst = new ArrayList<>();
        for (int i : nums) {
            for (int j : nums) {
                if (i <= 5) {  // 有效分钟数的小时部分是0-5之间的数字
                    lst.add(i * 10 + j);  // 组合小时和分钟
                }
            }
        }

        // 按升序排序
        Collections.sort(lst);

        // 查找下一个大于给定分钟数的时间组合
        for (int i : lst) {
            if (i <= m) {
                continue;
            }
            return formatTime(h, i);  // 找到大于当前分钟的有效时间
        }

        // 如果分钟数没有找到更大的值，且小时数不是23，则查找下一个大于当前小时数的组合
        if (h != 23) {
            for (int i : lst) {
                if (i <= h) {
                    continue;
                }
                if (i <= 23) {  // 确保小时数不超过23
                    return formatTime(i, lst.get(0));  // 格式化返回时间
                }
            }
        }

        // 如果无法找到合适的时间组合，则返回最小的时间组合
        return formatTime(lst.get(0), lst.get(0));  // 返回最小时间组合
    }

    /**
     * 格式化时间，确保小时和分钟部分为两位数
     *
     * @param h 小时
     * @param m 分钟
     * @return 返回格式化后的时间字符串
     */
    public static String formatTime(int h, int m) {
        return String.format("%02d:%02d", h, m);  // 格式化时间为"HH:MM"格式
    }
}